package br.ufrj.dcc.org2.binaria;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {
	public static void main(String[] args) throws IOException {
		DataItem aDataItem;
		int aKey, size, n, keysPerCell;
		// qual o tamanho?
		System.out.print("Digite o tamanho da tabela: ");
		size = getInt();
		System.out.print("Digite o numero inicial de itens: ");
		n = getInt();
		keysPerCell = 10; // PARAMETRO IMPORTANTE!!!!
							// "Quantas keys apontam pra uma celula?"
		// faz a tabela:
		HashTable theHashTable = new HashTable(size);

		for (int j = 0; j < n; j++) // insere os dados
		{
			aKey = (int) (java.lang.Math.random() * keysPerCell * size);
			aDataItem = new DataItem(aKey);
			theHashTable.insert(aDataItem);
		}
		
		//Para carregar uma lista pre-determinada

		String stringArquivo = " ";
		//Separando a string, para que cada string do vetor contenha um número
		String[] dados = stringArquivo .split(" ");
		//Preenchendo o vetor de dados
		/*for(int i = 0; i < size ; i++){
			aKey= Integer.parseInt(dados[i]);
			aDataItem = new DataItem(aKey);
			theHashTable.insert(aDataItem);
		}*/

		while (true) // interacoes com o usuario
		{
			System.out.print("Digite a 1a letra de ");
			System.out.print("mostrar, inserir, deletar, ou achar: ");
			char choice = getChar();
			switch (choice) {
			case 'm':
				theHashTable.displayTable();
				break;
			case 'i':
				System.out.print("Digite um valor a ser inserido: ");
				aKey = getInt();
				aDataItem = new DataItem(aKey);
				theHashTable.insert(aDataItem);
				break;
			case 'd':
				System.out.print("Digite um valor a ser deletado: ");
				aKey = getInt();
				theHashTable.delete(aKey);
				break;
			case 'a':
				System.out.print("Digite um valor a ser buscado: ");
				aKey = getInt();
				aDataItem = theHashTable.find(aKey);
				if (aDataItem != null) {
					System.out.println("Achou " + aKey);
				} else
					System.out.println("Nao foi possivel achar " + aKey);
				break;
			default:
				System.out.print("Input invalido!\n");
			}
		}
	}

	public static String getString() throws IOException {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		String s = br.readLine();
		return s;
	}

	public static char getChar() throws IOException {
		String s = getString();
		return s.charAt(0);
	}

	public static int getInt() throws IOException {
		String s = getString();
		return Integer.parseInt(s);
	}
}
